// void addWord(word)
// bool search(word)
// search(word) 可以搜索文字或正则表达式字符串，字符串只包含字母 . 或 a-z 。
// . 可以表示任何一个字母。

// addWord("bad")
// addWord("dad")
// addWord("mad")
// search("pad") -> false
// search("bad") -> true
// search(".ad") -> true
// search("b..") -> true
// 说明:
// 你可以假设所有单词都是由小写字母 a-z 组成的。

// WordDictionary.prototype.search = function (word) {
function WordDictionary () {
  // 创建map 存储
  this.map = new Map()
  
}
/**
 * 将字符串的 长度作为键值去存 值为 包含这个长度所有字符串的数组
 * 
 */
// 增加存储的方法
WordDictionary.prototype.addWord = function (str) {
  // 获取字符串的长度
  const length = str.length
  // 判断这个长度的字符串是否已经保存过了
  const item = this.map.get(length)
  if(item !== undefined) {
    // 如果已经存在则
    item.push(str)
  } else {
    this.map.set(length, [str])
  }
}

// 取值
WordDictionary.prototype.search = function (word) {
  // 获取到当前搜索的 长度
  const len = word.length
  // 判断这个长度是否在map集合中存在
  const result = this.map.get(len)
  // 如果不存在则 返回false
  if(result === undefined) {
    return false
  }
  // 如果存在则从数组中查找

  // 判断是否是正则（包不包含'.'）
  if(!word.includes('.')) {
    // 如果不包含. 运算符
    // 直接查找数组中是否包含
    return result.includes(word)

  }
  // 如果包含.字符串则说明是正则需要匹配正则返回
  const reg = new RegExp(word)
  return result.some(item => {
    return reg.test(item)
  })
}

const test = new WordDictionary()
test.addWord('abc')
test.addWord('cbc')
test.addWord('acbc')
console.log(test.search('.bc'))
console.log(test.search('acbc'))
console.log(test.map)
